Flashからアップロードする方法いろいろ

  • 2010 年 10月 18 日
  • kosuke

Flashからアップロードする方法を調べたのでまとめ。

ファイルリファレンスでファイルのアップロードする。
ローカルファイルをアップロードするならこの方法。

AS

var file:FileReference	= new FileReference();	//ファイルリファレンス
var req:URLRequest	= new URLRequest( "upload_filereference.php" );	//リクエスト先CGI
file.browse();	//ファイルを選択
file.addEventListener(Event.SELECT, function( e:Event ):void{
	file.upload( req );	//選択後アップロード
});

PHP

<?php
$name	= $_FILES[ 'Filedata' ]['name'];
$tmp	= $_FILES[ 'Filedata' ]['tmp_name'];
move_uploaded_file( $tmp, "./$name" );
?>

BASE64にエンコードしてアップロードする。
ダイナミックに生成した画像データをアップロードする例。

AS

//画像データ
var bmp:BitmapData	= new BitmapData( 100,100,false,0x000000 );
//PNGにエンコード
var pngEncorder:PNGEncoder	= new PNGEncoder();
//そのバイトデータ
var bytes:ByteArray	= pngEncorder.encode( bmp );
//Base64エンコード
var base64Encorder:Base64Encoder = new Base64Encoder();
base64Encorder.encodeBytes( bytes );
var base64:String	= base64Encorder.toString();
 
//リクエスト
var vars:URLVariables= new URLVariables();
vars.base64 = base64;
var req:URLRequest	= new URLRequest( "upload_base64.php" );
req.method	= URLRequestMethod.POST;
req.data	= vars;
 
//送信
var loader:URLLoader	= new URLLoader();
loader.load( req );

PHP

<?php
$bas = $_POST['base64'];		//BASE64エンコードテキストを受け取る
$bin = base64_decode( $bas );	//デコード
 
//ファイルに書き出す
$fp = fopen( "./xxx.png", "w" );
fwrite( $fp, $bin );
fclose( $fp );
?>

さらにバイナリのままアップロードする方法があった。

AS

//画像データ
var bmp:BitmapData	= new BitmapData( 100,100,false,0x000000 );
//PNGにエンコード
var pngEncorder:PNGEncoder	= new PNGEncoder();
//そのバイトデータ
var bytes:ByteArray	= pngEncorder.encode( bmp );
 
//リクエスト
var req:URLRequest	= new URLRequest( "upload_binary.php" );
//application/octet-streamはContent-Typeヘッダにおいてバイナリ形式である場合に指定されるサブタイプ
req.contentType	= "application/octet-stream";
req.method	= URLRequestMethod.POST;
req.data	= bytes;
 
//送信
var loader:URLLoader	= new URLLoader();
loader.load( req );

PHP

<?php
/*POST受信時にphp://inputで生データを取得できる*/
$bin= file_get_contents( "php://input" );	//バイナリを受け取る
//ファイルに書き出す
$fp = fopen( "./xxx.png", "w" );
fwrite($fp, $bin);
fclose($fp);
?>

“Flashからアップロードする方法いろいろ” に 5 件のコメント

  1. Gravatar Icon 関 より:

    サンプルとかありましたらいただけないでしょうか?

  2. Gravatar Icon kosuke より:

    コメントありがとうございます。
    すみません、作りながらの覚え書き程度に書いているもので公開できるサンプルファイルなどがないです。
    この記事のものはURLRequestのphpへのURLを設置先のURLに変えればうごくのではないかと思います。

  3. Gravatar Icon 関 より:

    コメントありがとうございます。

    「URLRequestのphpへのURLを設置先のURL」を変更することで
    おそらくということですが、ローカルにある画像ファイルが
    サーバーへアップロードできる認識でよろしかったでしょうか?

  4. Gravatar Icon 関 より:

    度々すいません。

    ASの部分をフレームに記述する形でしょうか?
    PHPは全く無知なので分からないのですが、FLAと同階層に
    配置するのでしょうか?

    なんどもすいません。よろしくお願い致します。

  5. Gravatar Icon kosuke より:

    ええ、ここで試したのはローカルファイルをアップロードする方法です。FileReferenceのbrowse()を実行した時点(browseはボタンアクションで実行する必要があったと思います)で、ブラウザのファイル選択ウインドウが開きます。ファイル選択をリスナーでキャッチして、upload()でphpへ送信が始まります。フレームスクリプトでも実行できるはずです。phpをswfと同じ階層に設置したならphpへのパスはphpファイル名のみです。うまくいくといいのですが。

  6. 4 件のトラックバック/ピンバック

    コメントをどうぞ